// #include <stdio.h>
// #include <stdlib.h>
// #include <assert.h>
// #include "windows.h"
// #define MAX_SIZE 100 // 静态链表的最大容量
//
// // 节点结构
// typedef struct {
//     int data; // 存储数据
//     int next; // 指向下一个节点的索引
// } Node;
//
// // 链表结构
// typedef struct {
//     Node nodes[MAX_SIZE]; // 存储节点的数组
//     int head; // 头节点的索引
//     int free; // 空闲节点的索引
// } LinkList;
//
// // 初始化静态链表
// void LinkInit(LinkList* list) {
//     assert(list);
//     list->head = -1; // 初始化头节点索引为-1，表示链表为空
//     list->free = 0; // 初始化空闲节点索引为0
//
//     // 初始化节点数组，将所有节点的next指向下一个节点
//     for (int i = 0; i < MAX_SIZE - 1; i++) {
//         list->nodes[i].next = i + 1;
//     }
//     list->nodes[MAX_SIZE - 1].next = -1; // 最后一个节点的next为-1
// }
//
// // 插入节点到静态链表尾部
// int LinkInsert(LinkList* list, int data) {
//     assert(list);
//     if (list->free == -1) {
//         // 没有空闲节点，链表已满
//         return -1;
//     }
//
//     int index = list->free; // 获取空闲节点的索引
//     list->free = list->nodes[index].next; // 更新空闲节点的索引
//
//     list->nodes[index].data = data; // 设置节点数据
//     list->nodes[index].next = -1; // 设置节点的next为-1
//
//     if (list->head == -1) {
//         // 链表为空，插入第一个节点
//         list->head = index;
//     } else {
//         // 链表不为空，插入到尾部
//         int current = list->head;
//         while (list->nodes[current].next != -1) {
//             current = list->nodes[current].next;
//         }
//         list->nodes[current].next = index;
//     }
//
//     return index; // 返回插入节点的索引
// }
//
// // 删除静态链表中的节点
// int LinkDelete(LinkList* list, int index) {
//     assert(list);
//     if (index < 0 || index >= MAX_SIZE) {
//         // 索引超出范围
//         return -1;
//     }
//
//     if (list->head == -1) {
//         // 链表为空
//         return -1;
//     }
//
//     if (list->head == index) {
//         // 删除头节点
//         list->head = list->nodes[index].next;
//     } else {
//         // 删除非头节点
//         int current = list->head;
//         while (list->nodes[current].next != index) {
//             current = list->nodes[current].next;
//             if (current == -1) {
//                 // 未找到节点
//                 return -1;
//             }
//         }
//         list->nodes[current].next = list->nodes[index].next;
//     }
//
//     // 将删除的节点加入空闲链表
//     list->nodes[index].next = list->free;
//     list->free = index;
//
//     return 0; // 成功删除
// }
//
// // 查找静态链表中的节点
// int LinkFind(LinkList* list, int data) {
//     assert(list);
//     int current = list->head;
//     while (current != -1) {
//         if (list->nodes[current].data == data) {
//             return current; // 返回找到的节点索引
//         }
//         current = list->nodes[current].next;
//     }
//     return -1; // 未找到
// }
//
// // 打印静态链表
// void LinkPrint(LinkList* list) {
//     assert(list);
//     int current = list->head;
//     while (current != -1) {
//         printf("%d ", list->nodes[current].data);
//         current = list->nodes[current].next;
//     }
//     printf("\n");
// }
//
// // 销毁静态链表
// void LinkDestroy(LinkList* list) {
//     assert(list);
//     // 由于使用了静态数组，无需释放节点内存
//     list->head = -1; // 重置头节点索引
//     list->free = 0; // 重置空闲节点索引
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkList list;
//     LinkInit(&list);
//
//     // 插入数据到静态链表
//     LinkInsert(&list, 1);
//     LinkInsert(&list, 2);
//     LinkInsert(&list, 3);
//     LinkInsert(&list, 4);
//
//     printf("静态链表内容: ");
//     LinkPrint(&list);
//
//     // 查找节点
//     int found = LinkFind(&list, 3);
//     if (found != -1) {
//         printf("找到节点，数据为: %d\n", list.nodes[found].data);
//     } else {
//         printf("未找到节点\n");
//     }
//
//     // 删除节点
//     LinkDelete(&list, found);
//     printf("删除节点后，静态链表内容: ");
//     LinkPrint(&list);
//
//     // 销毁静态链表
//     LinkDestroy(&list);
//
//     return 0;
// }